package co.inventario.datos.sqlserver;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.entidad.OrdenCompraDTO;
import co.inventario.entidad.KardexDTO;
import co.inventario.entidad.OrdenCompraKardexDTO;


public class OrdenCompraKardexDAOSQLServer {

	private String crearSQL;
	private String actualizarSQL;
	private String consultarSQL;

	public OrdenCompraKardexDAOSQLServer() {
		crearSQL = "";
		actualizarSQL = "";
		consultarSQL = "";
	}

	public void crear(OrdenCompraKardexDTO ordenCompraKardexDTO, Connection connection) throws SQLException {
		crearSQL = "INSERT INTO OrdenCompra_Kardex (In_Consecutivo_Orden_Kardex, In_Codigo_Orden, In_Codigo_Kardex) VALUE (?, ?, ?)";
		try (PreparedStatement preparedStatement = connection.prepareStatement(crearSQL)) {
			preparedStatement.setInt(1, ordenCompraKardexDTO.getInConsecutivoOrdenKardex());
			preparedStatement.setInt(2, ordenCompraKardexDTO.getOrdenCompraDTO().getInCodigoOrden());
			preparedStatement.setInt(3, ordenCompraKardexDTO.getKardexDTO().getInCodigoKardex());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema creandola orden de compra kardex: " + exception.getMessage());
		}
	}

	public void actualizar(OrdenCompraKardexDTO ordenCompraKardexDTO, Connection connection) throws SQLException {
		actualizarSQL = "UPDATE OrdenCompra_Kardex SET In_Codigo_Orden = ISNULL(?, In_Codigo_Orden), In_Codigo_Kardex = ISNULL(?, In_Codigo_Kardex) WHERE In_Codigo_Orden_Kardex = ?";
		try (PreparedStatement preparedStatement = connection.prepareStatement(actualizarSQL)) {
			preparedStatement.setInt(1, ordenCompraKardexDTO.getOrdenCompraDTO().getInCodigoOrden());
			preparedStatement.setInt(2, ordenCompraKardexDTO.getKardexDTO().getInCodigoKardex());
			preparedStatement.setInt(3, ordenCompraKardexDTO.getInCodigoOrdenKardex());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema actualizando la orden de compra kardex: " + exception.getMessage());
		}
	}

	public OrdenCompraKardexDTO consultarPorCodigo(OrdenCompraKardexDTO ordenCompraKardexDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM OrdenCompra_Kardex WHERE In_Codigo_Orden_Kardex = ?";
		OrdenCompraKardexDTO ordenCompraKardexDTOResultado = null;
		OrdenCompraDTO ordenCompraDTO = null;
		KardexDTO kardexDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, ordenCompraKardexDTO.getInCodigoOrdenKardex());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				ordenCompraKardexDTOResultado = new OrdenCompraKardexDTO();
				ordenCompraKardexDTOResultado.setInCodigoOrdenKardex(resultSet.getInt("In_Codigo_Orden_Kardex"));
				ordenCompraKardexDTOResultado.setInConsecutivoOrdenKardex(resultSet.getInt("In_Consecutivo_Orden_Kardex"));
				ordenCompraDTO = new OrdenCompraDTO();
				ordenCompraDTO.setInCodigoOrden(resultSet.getInt("In_Codigo_Orden"));
				ordenCompraKardexDTOResultado.setOrdenCompraDTO(ordenCompraDTO);
				kardexDTO = new KardexDTO();
				kardexDTO.setInCodigoKardex(resultSet.getInt("In_Codigo_Kardex"));
				ordenCompraKardexDTOResultado.setKardexDTO(kardexDTO);
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando la orden de compra kardex a traves del codigo: " + exception.getMessage());
		}
		return ordenCompraKardexDTOResultado;
	}

	public OrdenCompraKardexDTO consultarPorConsecutivo(OrdenCompraKardexDTO ordenCompraKardexDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM OrdenCompra_Kardex WHERE In_Consecutivo_Orden_Kardex = ?";
		OrdenCompraKardexDTO ordenCompraKardexDTOResultado = null;
		OrdenCompraDTO ordenCompraDTO = null;
		KardexDTO kardexDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, ordenCompraKardexDTO.getInConsecutivoOrdenKardex());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				ordenCompraKardexDTOResultado = new OrdenCompraKardexDTO();
				ordenCompraKardexDTOResultado.setInCodigoOrdenKardex(resultSet.getInt("In_Codigo_Orden_Kardex"));
				ordenCompraKardexDTOResultado.setInConsecutivoOrdenKardex(resultSet.getInt("In_Consecutivo_Orden_Kardex"));
				ordenCompraDTO = new OrdenCompraDTO();
				ordenCompraDTO.setInCodigoOrden(resultSet.getInt("In_Codigo_Orden"));
				ordenCompraKardexDTOResultado.setOrdenCompraDTO(ordenCompraDTO);
				kardexDTO = new KardexDTO();
				kardexDTO.setInCodigoKardex(resultSet.getInt("In_Codigo_Kardex"));
				ordenCompraKardexDTOResultado.setKardexDTO(kardexDTO);
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando la orden de compra kardex a traves del consecutivo: " + exception.getMessage());
		}
		return ordenCompraKardexDTOResultado;
	}

	public ArrayList<OrdenCompraKardexDTO> consultarTodo(Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM OrdenCompra_Kardex";
		OrdenCompraKardexDTO ordenCompraKardexDTOResultado = null;
		ArrayList<OrdenCompraKardexDTO> ordenCompraKardexDTOLista = null;
		OrdenCompraDTO ordenCompraDTO = null;
		KardexDTO kardexDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				ordenCompraKardexDTOResultado = new OrdenCompraKardexDTO();
				ordenCompraKardexDTOResultado.setInCodigoOrdenKardex(resultSet.getInt("In_Codigo_Orden_Kardex"));
				ordenCompraKardexDTOResultado.setInConsecutivoOrdenKardex(resultSet.getInt("In_Consecutivo_Orden_Kardex"));
				ordenCompraDTO = new OrdenCompraDTO();
				ordenCompraDTO.setInCodigoOrden(resultSet.getInt("In_Codigo_Orden"));
				ordenCompraKardexDTOResultado.setOrdenCompraDTO(ordenCompraDTO);
				kardexDTO = new KardexDTO();
				kardexDTO.setInCodigoKardex(resultSet.getInt("In_Codigo_Kardex"));
				ordenCompraKardexDTOResultado.setKardexDTO(kardexDTO);
				ordenCompraKardexDTOLista = new ArrayList<OrdenCompraKardexDTO>();
				ordenCompraKardexDTOLista.add(ordenCompraKardexDTOResultado);
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando todas las ordenes de compra kardex: " + exception.getMessage());
		}
		return ordenCompraKardexDTOLista;
	}
}
